package com.haircut.enums;

import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;

/**
 * 用户角色类型枚举（替代字符串硬编码，确保类型安全）
 */
public enum UserType {

    /**
     * 管理员：拥有系统最高权限，可管理所有用户和配置
     */
    ADMIN("ADMIN", "管理员"),

    /**
     * 理发师：可处理订单、管理服务项目等
     */
    BARBER("BARBER", "理发师"),

    /**
     * 客户：普通用户，可预约、消费等
     */
    CUSTOMER("CUSTOMER", "客户");

    /**
     * 存储到数据库的枚举值（MyBatis-Plus 注解）
     */
    @EnumValue
    private final String code;

    /**
     * 前端展示的中文描述（JSON 序列化时返回该值）
     */
    @JsonValue
    private final String desc;

    // 构造器
    UserType(String code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    // Getter 方法
    public String getCode() {
        return code;
    }

    public String getDesc() {
        return desc;
    }

    /**
     * 根据编码获取枚举实例（用于从数据库值转换为枚举）
     */
    public static UserType getByCode(String code) {
        for (UserType type : values()) {
            if (type.code.equals(code)) {
                return type;
            }
        }
        throw new IllegalArgumentException("无效的用户类型编码：" + code);
    }

    @Override
    public String toString() {
        return code; // 默认返回编码（便于日志打印）
    }
}